home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / mcomm / smalterm.cpp < prev    next >
C/C++ Source or Header  |  1994-10-02  |  60KB  |  1,578 lines

  1.  
  2. /////////////////////////////////////////////////////////////////////////////
  3. //     S M A L T E R M  --  D e m o   D r i v e r   f o r   M C O M M      //
  4. //                         A s y n c   R o u t i n e s                     //
  5. //                                                                         //
  6. //                                                                         //
  7. //             Mike Dumdei, 6 Holly Lane, Texarkana TX 75503               //
  8. //                 North East Texas DataLink, 903 838-6713                 //
  9. //                                                                         //
  10. //              (Link with comm_s.lib for external functions)              //
  11. //                     ztc smalterm.cpp comm.cpp comm_s.lib                //
  12. //                     bcc smalterm.cpp comm.cpp comm_s.lib                //
  13. //                     tcc smalterm.cpp comm.cpp comm_s.lib                //
  14. //                     cl smalterm.cpp comm.cpp /link comm_s               //
  15. /////////////////////////////////////////////////////////////////////////////
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <ctype.h>
  19. #include <string.h>
  20. #include <process.h>
  21. #include <stdarg.h>
  22. #include <dos.h>
  23. #include <bios.h>
  24. #include <signal.h>
  25.  
  26. #include "comm.hpp"                 // header for AsyncPort class
  27. #include "timer.hpp"                // header for Timer class
  28. #include "ansivid.hpp"              // header for ANSI display functions
  29. #define KEY_INT
  30. #include "keys.h"                   // key definition header
  31. #include "colors.h"                 // vid mode & color definition header
  32. #include "extra.h"                  // extra functions header
  33.  
  34. #if defined(__TURBOC__)             // Turbo C++
  35.   #define KBHIT   bioskey(1)
  36.   #define KBREAD  bioskey(0)
  37. #else                               // Zortech C++, Microsoft C++
  38.   #define KBHIT   _bios_keybrd(1)
  39.   #define KBREAD  _bios_keybrd(0)
  40. #endif
  41.  
  42. #ifndef __ZTC__
  43.   #include <io.h>
  44.   #define strcmpl stricmp
  45. #endif
  46.  
  47. #define NO_INPUT     (-1)
  48. #define ESC_PRESSED  (-2)
  49. #define TIMED_OUT    (-3)
  50. #define NO_CARRIER   (-4)
  51. #define ERROR_LIMIT  (-5)
  52. #define GOT_CANNED   (-6)
  53. #define BLK_COMP_ERR (-7)
  54. #define BLK_SEQ_ERR  (-8)
  55. #define CHECKSUM_ERR (-9)
  56.  
  57. #define TERMINAL       0
  58. #define HOSTMODE       1            // hostmode isn't in here yet
  59.  
  60. #define SOH         '\x01'
  61. #define STX         '\x02'
  62. #define EOT         '\x04'
  63. #define ACK         '\x06'
  64. #define NAK         '\x15'
  65. #define CAN         '\x18'
  66.  
  67. ///////////////////////////////////////////////////////////////
  68. //  function declarations in order found in source (random)  //
  69. //:////////////////////////////////////////////////////////////
  70. // void ControlBreakHandler(int sig);
  71. int ProcessKeyPress();
  72. void ProcessExtendedKey(int LongCh);
  73. int ProcessAsyncChar();
  74. int SaveScreen();
  75. void RestoreScreen();
  76. void VideoStatus(int saving);
  77. void ClearScreen();
  78. void ToggleLogFile();
  79. void ToggleEcho();
  80. void ToggleLineFeeds();
  81. void ToggleDtr();
  82. void DialNumber();
  83. void DOS_Shell();
  84. void DOS_Command();
  85. void HostMode();
  86. void MessageUpload();
  87. void TXZMUpload();
  88. void TXZMDownload();
  89. void RunBatchFile(char *FileName);
  90. void SendFile();
  91. void ReceiveFile();
  92. void ExitProgram();
  93. int DisplayHelp();
  94. void DisplayParameters();
  95. void ChangeParameters();
  96. int DrawBox(int Top, int Lft, int Height, int Length);
  97. void RemoveBox();
  98. int Prompt(char *Response, char *PromptMsg, int MaxResponse);
  99. void HangUp();
  100. int MonitoredDelay(int Ticks, int MonitorCarrier);
  101. int WaitFor(char *String, int Ticks, int MonitorCarrier);
  102. void vDisplay(char *Format, ...);
  103. void vDisplay(int Color, char *Format, ...);
  104. void vDisplay(int Row, int Col, char *Format, ...);
  105. int PushScreen(int Row, int Col, int NbrRows, int NbrCols);
  106. int PopScreen();
  107. void ReceiveXmodem(char *FileName);
  108. void SendXmodem(char *FileName, int BlockSize = 128);
  109. void XmodemExitMsg(int rval);
  110. int RxWithTimeOut(int Ticks);
  111. void SetXmodemMode(char& save_xoff, char& save_flushbad, char *save_params);
  112. void ResetXmodemMode(char& save_xoff, char& save_flushbad, char *save_params);
  113. void SendCANs();
  114. int WaitForBlockToEnd(int Ticks);
  115. int GetHdrChar(int Ticks);
  116. void TransferWindow(int Flag);
  117.  
  118. ////////////////////////
  119. //  global variables  //
  120. ////////////////////////
  121. AsyncPort port(4096, 2048);     // port with 4K transmit, 2K receive buffers
  122. char port_name[5];              // ASCII "COM1" or "COM2"
  123. int port_number;                // assigned number COM1==0, COM2==1
  124. int Mode;                       // identifies to subroutines HOST or TERMINAL
  125. FILE *LogFile = NULL;           // handle for log file
  126. char DialString[40];            // storage for dial string
  127. int LineFeeds = 0;              // supply LineFeeds flag
  128. int Echo = 0;                   // Echo on flag
  129. int Dtr = 1;                    // DTR signal level flag
  130. int cyn, hred, grn, hgrn;       // video color variables to enable support
  131. int wht, hblu, ylw;             //   for either color or mono system
  132. char vDispBuf[128];             // buffer for formatted display functions
  133. char *ScreensArray[10];         // array of pointers for Push/Pop Screen
  134. char ScreenIndex = 0;           // index of current pointer in above array
  135.  
  136.  
  137. /////////////////////////////////////////////////
  138. //  main                                       //
  139. //://////////////////////////////////////////////
  140. int cdecl main (int argc, char *argv[])
  141. {
  142.     char params[10], *pc;
  143.     int got_port = 0, return_value, i;
  144.  
  145.     ////////////////////////////////////
  146.     // process command line arguments //
  147.     ////////////////////////////////////
  148.     *params = '\0';                             // preset params to nul string
  149.     for (i = 1; i < argc; i++)
  150.     {
  151.         pc = argv[i];                           // pointer to argument
  152.         if (*pc == '-' || *pc == '/')
  153.             ++pc;                               // skip any switch characters
  154.         if (got_port == 0)
  155.         {
  156.             if (strcmpl(argv[i], "COM1") == 0)      // check for "COM1"
  157.                 got_port = 1;
  158.             else if (strcmpl(argv[i], "COM2") == 0) // check for "COM2"
  159.                 got_port = 1, port_number = COM2;
  160.         }
  161.         if (isdigit(*pc) && strlen(pc) < 10)    // check for parameter string
  162.             strupr(strcpy(params, argv[i]));
  163.     }
  164.     strcpy(port_name, (port_number == COM1) ? "COM1" : "COM2");
  165.  
  166.     ///////////////////////////
  167.     // initialize the video  //
  168.     ///////////////////////////
  169.     initvid();                          // initialize lowlevel video variables
  170.     if (v_mode != MONO && v_mode != CO80)
  171.         setvmode(CO80);                 // reset video mode if necessary
  172.     if (v_mode == CO80)
  173.     {                                   // attributes to use if color system
  174.         cyn = CYN, hred = H_RED, grn = GRN, hgrn = H_GRN,
  175.         wht = WHT, hblu = H_BLU, ylw = YLW;
  176.     }
  177.     else
  178.     {                                   // attributes to use if mono system
  179.         cyn = WHT, hred = H_WHT, grn = WHT, hgrn = H_WHT,
  180.         wht = WHT, hblu = H_WHT, ylw = H_WHT;
  181.     }
  182.     SaveScreen();
  183.  
  184.     /////////////////////////////
  185.     // display sign on message //
  186.     /////////////////////////////
  187.     Display(hred, "SMALTERM - Sample driver for MCOMM library functions\n");
  188.     Display(grn, "    Mike Dumdei, 6 Holly Lane, Texarkana TX 75503\n");
  189.     Display("    North East Texas DataLink   903 838-6713\n");
  190.     Display(hred, "Usage: smalterm {COM1 | COM2} {param str EX: 2400N81}\n\n");
  191.     v_color = cyn;
  192.  
  193.     //////////////////////////
  194.     // open the serial port //
  195.     //////////////////////////
  196.     return_value = port.Open(port_number, params);
  197.     if (return_value != 0)                      // if port open failed
  198.     {
  199.         vDisplay(
  200.           "SMALTERM: Can't open %s, Parameters: %s, Error code: %04X\n",
  201.            port_name, (*params) ? params : "default", return_value);
  202.         exit(return_value);
  203.     }                                           // if port open succeeded
  204.     vDisplay("SMALTERM: %s -- PORT OPENED\n\n", port_name);
  205.     Displa